package com.example.demo.vo;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** 
* @ClassName: PhoneNumberMasker 
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author majie
* @date 2024年12月24日  
*/
public class PhoneNumberMasker {
	 

    // 正则表达式，用于匹配包含连续11位数字的字符串（允许数字之间存在-[],*等字符）
    private static final String PHONE_NUMBER_REGEX =
            "(\\d[\\d-*\\[\\]]*\\d{3})(\\d{4})(\\d[\\d-*\\[\\]]*\\d{3})";
 
    public static String obfuscatePhoneNumber(String input) {
        // 编译正则表达式
        Pattern pattern = Pattern.compile(PHONE_NUMBER_REGEX);
        Matcher matcher = pattern.matcher(input);
 
        // 使用StringBuffer来构建替换后的字符串
        StringBuffer result = new StringBuffer();
 
        // 遍历匹配结果
        while (matcher.find()) {
            // 提取匹配到的数字部分（这里假设前后可能存在的非数字字符已经被正则表达式包容）
            String fullNumber = matcher.group(0);
            // 提取中间的4位数字（注意：这里假设前后部分已经确保总长度为11位数字）
            String middleFourDigits = matcher.group(2);
 
            // 构建替换后的字符串（将中间4位替换为*）
            String obfuscatedNumber = matcher.group(1) + "****" + matcher.group(3);
 
            // 将替换后的字符串放入结果中
            matcher.appendReplacement(result, obfuscatedNumber);
        }
 
        // 将剩余未匹配的部分添加到结果中
        matcher.appendTail(result);
 
        // 由于正则表达式可能匹配到多个符合条件的子串，但题目要求返回处理后的整个字符串
        // 因此我们不需要对每一个匹配结果做额外处理，直接返回result即可
        return result.toString();
    }
 
    public static void main(String[] args) {
        // 测试字符串
        String testString = "这里有一些数字，比如131-195[1]47*15，还有其他文本。";
 
        // 打印处理后的字符串
        System.out.println(obfuscatePhoneNumber(testString));
    }
}
